package chapter05

object Test09_ClosureAndCurrying {
  def main(args: Array[String]): Unit = {
    def add(a: Int, b: Int): Int = a + b;

    //1 考虑固定一个加数的场景
    def addByFour(b: Int): Int = 4 + b

    //2. 扩展固定加数改变的时候
    def addByFive(b: Int): Int = 5 + b

    //3. 待固定的加数作为一个参数加入，但是作为第一层参数加入
    def addByFour1(): Int => Int = {
      val a = 4

      def addB(b: Int): Int = a + b

      addB
    }

    def addByA(a: Int): Int => Int = {
      def addB(b: Int): Int = a + b

      addB
    }

    println(addByA(35)(15))
    val addByFour2 = addByA(4)
    val addByFive2 = addByA(5)

    //lambda表达式简写
    def addByA1(a: Int): Int => Int = { b => a + b }

    def addByA2(a: Int): Int => Int = a + _

    //柯里化
    def addCurrying(a: Int)(b: Int): Int = a + b
  }
}
